#!/bin/bash

# 备份原文件
cp universal_mirror_manager_shell.sh universal_mirror_manager_shell.sh.backup

# 查看第90-100行的问题代码
echo "=== 检查问题代码 ==="
sed -n '90,105p' universal_mirror_manager_shell.sh

# 修复问题：evaluate_mirror 函数中的输出干扰了整数比较
# 创建修复版本
cat > universal_mirror_manager_shell_fixed.sh << 'FIXEDEOF'
#!/bin/bash

# 通用子模块镜像管理器 (Shell 版本)
# 自动发现、评估和配置最优镜像

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'

# 镜像源配置
MIRROR_PROVIDERS=(
    "https://gitee.com/mirrors/{repo_name}"
    "https://gitee.com/uesoft/{repo_name}" 
    "https://gitcode.com/mirrors/{repo_name}"
)

# 日志函数
log_info() {
    echo -e "${BLUE}ℹ ${NC}$1"
}

log_success() {
    echo -e "${GREEN}✅ ${NC}$1"
}

log_warning() {
    echo -e "${YELLOW}⚠ ${NC}$1"
}

log_error() {
    echo -e "${RED}❌ ${NC}$1"
}

# 提取仓库名称
extract_repo_name() {
    local url="$1"
    local repo_name
    
    # 移除 .git 后缀
    url="${url%.git}"
    
    # 从URL中提取仓库名
    if [[ "$url" =~ github\.com/([^/]+)/([^/]+)$ ]]; then
        repo_name="${BASH_REMATCH[2]}"
    elif [[ "$url" =~ gitlab\.com/([^/]+)/([^/]+)$ ]]; then
        repo_name="${BASH_REMATCH[2]}"
    else
        # 其他情况，取最后一部分
        repo_name="${url##*/}"
    fi
    
    echo "$repo_name"
}

# 评估镜像可用性 - 修复版本
evaluate_mirror() {
    local mirror_url="$1"
    local original_url="$2"
    
    # 使用文件描述符3来避免输出干扰
    exec 3>&1
    local output
    output=$( {
        echo -e "    评估: $mirror_url" >&3
        
        # 检查镜像是否存在
        if git ls-remote "$mirror_url" &>/dev/null; then
            # 获取标签数量作为评分
            local tag_count
            tag_count=$(git ls-remote --tags "$mirror_url" 2>/dev/null | wc -l)
            
            # 根据标签数量评分
            local score=0
            if [ "$tag_count" -gt 100 ]; then
                score=100
                echo -e "    评估: $mirror_url ... ${GREEN}✅ 优秀 ($tag_count 标签)${NC}" >&3
            elif [ "$tag_count" -gt 50 ]; then
                score=80
                echo -e "    评估: $mirror_url ... ${GREEN}✅ 良好 ($tag_count 标签)${NC}" >&3
            elif [ "$tag_count" -gt 10 ]; then
                score=60  
                echo -e "    评估: $mirror_url ... ${YELLOW}⚠ 一般 ($tag_count 标签)${NC}" >&3
            else
                score=40
                echo -e "    评估: $mirror_url ... ${YELLOW}⚠ 基础 ($tag_count 标签)${NC}" >&3
            fi
            
            echo "$score"
        else
            echo -e "    评估: $mirror_url ... ${RED}❌ 不可用${NC}" >&3
            echo "0"
        fi
    } 2>&1 )
    
    exec 3>&-
    echo "$output" | tail -1
}

# 寻找最优镜像
find_best_mirror() {
    local original_url="$1"
    local repo_name
    repo_name=$(extract_repo_name "$original_url")
    
    log_info "为 $repo_name 寻找最优镜像..."
    
    local best_mirror=""
    local best_score=0
    
    for provider in "${MIRROR_PROVIDERS[@]}"; do
        # 生成可能的镜像URL变体
        local mirror_variants=(
            "$(echo "$provider" | sed "s/{repo_name}/$repo_name/g")"
            "$(echo "$provider" | sed "s/{repo_name}/lib$repo_name/g")"
        )
        
        for mirror_url in "${mirror_variants[@]}"; do
            local score
            score=$(evaluate_mirror "$mirror_url" "$original_url")
            
            # 使用安全的整数比较
            if [ -n "$score" ] && [ "$score" -gt "0" ] && [ "$score" -gt "$best_score" ]; then
                best_score="$score"
                best_mirror="$mirror_url"
            fi
        done
    done
    
    if [ "$best_score" -gt 0 ]; then
        log_success "找到最优镜像: $best_mirror (得分: $best_score)"
        echo "$best_mirror"
    else
        log_error "未找到合适镜像 (最佳得分: $best_score)"
        echo ""
    fi
}

# 配置镜像替换
configure_mirror() {
    local original_url="$1"
    local mirror_url="$2"
    
    if [ -n "$mirror_url" ]; then
        log_info "配置镜像: $original_url -> $mirror_url"
        git config --global "url.$mirror_url.insteadof" "$original_url"
        log_success "镜像配置成功"
    else
        log_warning "跳过配置: 未找到合适镜像"
    fi
}

# 处理所有子模块
process_all_submodules() {
    log_info "开始处理所有子模块"
    
    local success_count=0
    local total_count=0
    
    # 获取所有子模块
    while IFS= read -r path; do
        total_count=$((total_count + 1))
        local url_key="submodule.${path}.url"
        local original_url
        original_url=$(git config --file .gitmodules --get "$url_key")
        
        if [ -z "$original_url" ]; then
            # 尝试另一种格式
            url_key=$(git config --file .gitmodules --get-regexp "path" | grep "$path" | cut -d. -f1-2).url
            original_url=$(git config --file .gitmodules --get "$url_key")
        fi
        
        log_info "处理子模块: $path"
        log_info "原始 URL: $original_url"
        
        local best_mirror
        best_mirror=$(find_best_mirror "$original_url")
        
        if [ -n "$best_mirror" ]; then
            configure_mirror "$original_url" "$best_mirror"
            success_count=$((success_count + 1))
        else
            log_error "无法为该子模块找到合适镜像"
        fi
        
        echo
    done < <(git config --file .gitmodules --get-regexp path | awk '{print $2}')
    
    log_info "处理完成"
    log_success "成功配置: $success_count/$total_count 个子模块"
}

# 检查当前配置
check_current_config() {
    log_info "检查镜像配置"
    git config --global --get-regexp "url.*.insteadof" || log_info "暂无镜像配置"
}

# 初始化子模块
init_submodules() {
    log_info "初始化子模块"
    git submodule update --init --recursive --progress
}

# 显示帮助
show_help() {
    cat << EOF
通用子模块镜像管理器 (Shell 版本)
自动发现、评估和配置最优镜像

使用方法: $0 <command>

命令:
  setup   为所有子模块自动寻找并配置最优镜像
  init    初始化子模块（使用配置的镜像）
  check   检查当前镜像配置
  test <url>  测试单个项目的镜像发现
  help    显示此帮助信息
